package services

import (
	"backend/controllers"

	"github.com/gin-gonic/gin"
)

func CollectRoutes(r *gin.Engine) *gin.Engine {
	// 创建一个分组路由
	api := r.Group("/BuildMind/user")
	{
		// 验证用户存在
		api.GET("/existence", controllers.CheckUserExistence)

		// 注册相关路由
		registerGroup := api.Group("/register")
		{
			// 获取注册验证码
			registerGroup.GET("/get_verified", controllers.GetRegisterCode)
			// 注册
			registerGroup.POST("", controllers.Register)
		}

		// 登录相关路由
		loginGroup := api.Group("/login")
		{
			// 获取登录验证码
			loginGroup.GET("/get_verified", controllers.GetLoginAndResetCode)
			// 验证码登录
			loginGroup.POST("/email", controllers.EmailLogin)
			// 密码登录
			loginGroup.POST("/password", controllers.PasswordLogin)
		}

		// 重置密码相关路由
		resetGroup := api.Group("/reset_password")
		{
			// 获取重置密码验证码
			resetGroup.GET("/get_verified", controllers.GetLoginAndResetCode)
			// 重置密码
			resetGroup.POST("", controllers.ResetPassword)
		}

		// cookie相关
		cookieGroup := api.Group("/cookie")
		{
			// 是否登录
			cookieGroup.GET("/existence", controllers.CheckCookieExistence)
			// 退出登录
			cookieGroup.GET("/logout", controllers.Logout)
		}

		// 用户信息
		profileGroup := api.Group("/profile")
		{
			// 设置用户名
			profileGroup.POST("/name", controllers.SetName)
			// 获取用户信息
			profileGroup.GET("", controllers.GetUser)
		}
	}
	// 注册全局中间件，验证cookie
	r.Use(controllers.CheckCookies)

	api = r.Group("/BuildMind/intention")
	{
		// 提取用户需求
		api.POST("/extract", controllers.ParseIntention)
		// 更改用户需求
		api.POST("/change", controllers.ChangeIntention)
		// 查询用户需求
		api.GET("/query", controllers.GetIntention)
		// 删除记录,顺便删除工作流
		api.POST("/delete", controllers.DeleteIntention)
		// 获取历史记录列表
		api.GET("/history", controllers.GetHistory)
	}

	api = r.Group("/BuildMind/workflow")
	{
		// 生成工作流
		api.POST("/generate", controllers.GenerateWorkflow)
		// 更改工作流
		api.POST("/change", controllers.ChangeWorkflow)
		// 查询，两种，通过工作流id，通过需求id
		api.GET("/query", controllers.GetWorkflow)
		api.GET("/queryByIntention", controllers.GetWorkflowByIntention)
	}

	api = r.Group("/BuildMind/code")
	{
		// 生成项目代码
		api.POST("/generate", controllers.GenerateCode)
		// 更改代码，需要指定文件
		api.POST("/changeFile", controllers.ChangeFile)
		// 获取代码文件列表
		api.GET("/files", controllers.GetFileList)
		// 获取单个代码文件详情
		api.GET("/file", controllers.GetFile)
		// 代码文件打包下载
		api.GET("/downloadAll", controllers.DownloadProject)
		// 下载单个文件
		api.GET("/download", controllers.DownloadSingleFile)
	}

	return r
}
